When an application program that contains one or more defects is distributed to application users, the defects might cause an unexpected termination during the execution of the program or process. Tools and procedures have been developed to assist computer administrators and application developers with the analysis of such an unexpected termination. The provided information usually includes a stack trace describing frames that represent the program stack. A stack trace is a report of the active frames at a certain point in time during the execution of a program. A stack trace can allow for the tracking of the sequence of nested functions or procedures that were called up to the point where the stack trace is generated. A frame is representation of a function or a procedure that can be mapped to a program source code. A program stack is a listing of programs, functions, or procedures that have been executed up until the unexpected termination of the program and are arranged in the form of a stack.
A single defect in the computer source code may cause the creation of different stack traces. The stack traces that may be caused by a singe defect often share a similar characteristic but they might also differ substantially. For example, the names of frames of one stack trace may not be present in another stack trace, yet may be caused by the same application defect. In another example, the same frames may be present in two different stack traces but may appear in different respective orders. In another implementation, a first stack trace may share certain specific frames with a second stack trace, but the first stack trace may have additional frames that are not present in the second stack trace.
There are multiple reasons why a single application defect can cause different stack traces. Such reasons may include, for example: 1) the diversity of the users' hardware, for example the stack trace may reflect the availability of certain unique instructions on the computer's main processor, the ordering of the sub-components of the instructions, and the availability of a specific hardware such as a graphical processing unit; 2) the stack trace may reflect the diversity of the users' application environment, for example, different versions of the operating system kernel, shared libraries, programs, application plug-ins, system configuration and settings, and user preferences may be installed on different computers; and 3) the stack trace may include information regarding the diversity of the users' input and the occurrence of other events (such as incoming data from the computer network, and the wake-up of a system timer) that triggers the program defect or happens before the unexpected termination occurs.
The differences in the stack traces may cause a substantial overhead in the application maintenance functions. For example, an application developer may receive several stack traces, wherein each stack trace may indicate an unexpected termination of an application program execution. The application developer may analyze each individual stack trace to help him or her to pinpoint the source code location to be corrected. When an application developer corrects a defect in the program, he or she then may move on to analyze the next stack trace. It may not be clear or apparent to the application developer that a stack trace may have been caused by the same application defect that the application developer had already corrected while attending to or while analyzing a previous stack trace. Consequently, the application developer may spend time to analyze a stack trace in order to correct an application defect that was already corrected. The expertise and effort that is required to recognize that two stack traces that appear to be different but are caused by the same application defect can be substantial.